'use strict'
process.chdir(__dirname)
const titbit =require('titbit')
const fs=require('fs')
const pg=require('pg')
const dbconfig=require('./dbconfig.js')
const wxkey=require('./wxkey.js')
const token=require('titbit-token')

let tok=new token({
    expires:30,
    //必须是32位字母数字
    key:'6hjdghkiy7892hdsnuhdfh73dhfshye9',
    //16位
    iv:'6dha9fgdjghdli9'
})
//使用HTTP/1.1的客户端
const {httpcli}=require('gohttp')
//初始化数据库连接
let psql=new pg.Pool(dbconfig)

try{
    fs.accessSync('./images')
}catch(err){
    fs.mkdirSync('./images')
}
let cert_path='/usr/local/share'
const app=new titbit({
    //开启调试模式会报错
    debug:true,
    globalLog:true,
    cert:`${cert_path}/lisiwen.lang2shangyang.top.pem`,
    key:`${cert_path}/lisiwen.lang2shangyang.top.key`
})

//c就是context 
app.get('/',async c=>{c.send('ok')})
app.get('/upload',async c=>{
    //c.helper是助手函数模块，其中stream.pipe的封装
    //c.reply是响应对象，http/1.1中指向response，http/2中指向stream
    await c.helper.pipe('./upload.html',c.reply)
})
//JS无需加分号，谁用谁知道
//有时也得加分号，括号开头很需要
// ;(async()=>{

// })();
/**-----路由------ */
app.get('./content',async c=>{
    let sqltext='SELECT id,title,update_time FROM content'
    let r=await psql.query(sqltext)
    c.send(r.rows)
})
app.post('/content',async c=>{
    try{
        let data=JSON.parse(c.body)
        let sqltext='INSERT INTO content'
            +'(id,detail,title,add_time,update_time)'
            +'VALUES($1,$2,$3,$4,$5)'
        let id=Math.random().toString(16).substring(2)
        let tm=Date.now()

        let r=await psql.query(sqltext,[
            id,data.detail,data.title,tm,tm
        ])
        if(r.rowCount===0){
            return c.status(500).send('failed')
        }
        c.send(id)
    }catch(err){

    }
    
})
app.get('/content/:id',async c=>{
    let id =c.param.id
    let sqltext='SELECT id ,detail,title,update_time'
        +'FROM content WHERE id=$1';
    let r =await psql.query(sqltext,[id])

    if(r.rowCount===0){
        return c.status(404).send('not found');
    }
})

app.post('/upload',async c =>{
    let f=c.getFile('file')

    if(!f){
        return c.status(400).send('file not found')
    }
    //生成唯一文件名
    let fname=c.helper.makeName(f.filename)
    try{
        await c.moveFile(f,`./images/${fname}`)
        c.send(fname)
    }catch(err){
        c.status(500).send('failed')
    }
    

})
app.get('/image/:name', async c=>{
    let imgname=c.param.name
    try{
        await c.helper.pipe(`./images/${imgname}`,c.reply)
    }catch(err){
        c.status(404).send('image not found')
    }
})
app.get('/usr/:name/:age/:mobile',async c=>{
    console.log(c.param)
    c.send(c.param)
})
app.get('/mp-login/:code',async c=>{
    c.send(c.param)
    let auth_url=`https://api.weixin.qq.com/sns/jscode2session`
            +`?appid=${wxkey.appid}&secret=${wxkey.secret}`
            +`&js_code=${c.param.code}&grant_type=authorization_code`
    
    let ret=await httpcli.get(auth_url)
                        .then(res=>{
                            return res.json()
                        })
    c.send(tok.make(ret))
})
//监听1234端口运行服务
app.run(7777)